package entity

import "time"

// DBConnection 数据库连接实体
type DBConnection struct {
	ID          int64     `json:"id" gorm:"primaryKey;column:id"`                           // 主键ID
	Name        string    `json:"name" gorm:"size:100;not null;column:name"`                // 连接名称
	Type        string    `json:"type" gorm:"size:20;not null;column:type"`                 // 数据库类型
	Host        string    `json:"host" gorm:"size:100;not null;column:host"`                // 主机地址
	Port        int       `json:"port" gorm:"not null;column:port"`                         // 端口号
	Username    string    `json:"username" gorm:"size:50;not null;column:username"`         // 用户名
	Password    string    `json:"password" gorm:"size:100;not null;column:password"`        // 密码
	Database    string    `json:"database" gorm:"size:50;not null;column:database"`         // 数据库名
	Description string    `json:"description" gorm:"size:200;column:description"`           // 描述
	Status      string    `json:"status" gorm:"size:20;not null;column:status"`             // 状态
	CreatedAt   time.Time `json:"created_at" gorm:"not null;column:created_at"`             // 创建时间
	UpdatedAt   time.Time `json:"updated_at" gorm:"not null;column:updated_at"`             // 更新时间
	LastUsedAt  time.Time `json:"last_used_at" gorm:"column:last_used_at"`                  // 最后使用时间
	Config      string    `json:"config" gorm:"type:text;column:config"`                    // 额外配置
	Tags        string    `json:"tags" gorm:"size:200;column:tags"`                         // 标签
	IsActive    bool      `json:"is_active" gorm:"not null;default:true;column:is_active"`  // 是否激活
	IsSystem    bool      `json:"is_system" gorm:"not null;default:false;column:is_system"` // 是否系统连接
}

// TableInfo 表信息实体
type TableInfo struct {
	Name          string    `json:"name"`           // 表名
	Comment       string    `json:"comment"`        // 表注释
	RowCount      int64     `json:"row_count"`      // 行数
	CreateTime    time.Time `json:"create_time"`    // 创建时间
	UpdateTime    time.Time `json:"update_time"`    // 更新时间
	Engine        string    `json:"engine"`         // 存储引擎
	Collation     string    `json:"collation"`      // 字符集
	TableSchema   string    `json:"table_schema"`   // 数据库名
	Size          int64     `json:"size"`           // 表大小
	AutoIncrement int64     `json:"auto_increment"` // 自增值
	Version       int       `json:"version"`        // 版本
}

// ColumnInfo 列信息实体
type ColumnInfo struct {
	Name         string `json:"name"`           // 列名
	Type         string `json:"type"`           // 数据类型
	Nullable     bool   `json:"nullable"`       // 是否可为空
	Default      string `json:"default"`        // 默认值
	Comment      string `json:"comment"`        // 列注释
	IsPrimaryKey bool   `json:"is_primary_key"` // 是否主键
	IsUnique     bool   `json:"is_unique"`      // 是否唯一
	IsIndex      bool   `json:"is_index"`       // 是否索引
	Length       int    `json:"length"`         // 长度
	Precision    int    `json:"precision"`      // 精度
	Scale        int    `json:"scale"`          // 小数位数
	Extra        string `json:"extra"`          // 额外信息
}

// QueryResult 查询结果实体
type QueryResult struct {
	Columns []string        `json:"columns"` // 列名
	Rows    [][]interface{} `json:"rows"`    // 数据行
	Total   int64           `json:"total"`   // 总记录数
	Time    float64         `json:"time"`    // 执行时间(毫秒)
}

func (DBConnection) TableName() string {
	return "db_connections"
}
